package com.demo.project_template.service;


import com.demo.project_template.entity.ShoppingCart;
import com.demo.project_template.vo.request.shoppingcart.*;
import com.demo.project_template.vo.response.R;

import java.util.List;

/**
 * @author ZhangKeChen
 * @date 2022/9/5
 */
public interface ShoppingCartService {
    /**
     * 添加商品购物车
     *
     * @param cartAddVo
     * @return
     */
    void addShoppingCart(CartAddVO cartAddVo);

    /**
     * 查询用户购物车中的商品
     *
     * @param userId
     * @return
     */
    SelectShoppingCartListVO selectShoppingCartList(Long userId);

    /**
     * 购物车全选
     *
     * @param userId
     * @return
     */
    SelectShoppingCartListVO selectAllCart(Long userId);

    /**
     * 购物车全不选
     *
     * @param userId
     * @return
     */
    SelectShoppingCartListVO unSelectAllCart(Long userId);

    /**
     * 修改购物车
     *
     * @param cartUpdateVo
     * @return
     */
    List<ShoppingCart> updateShoppingCart(CartUpdateVO cartUpdateVo);

    /**
     * 删除购物车（批量）
     */

    List<ShoppingCart> deleteShoppingCart(DeleteShoppingCartVO deleteShoppingCartList);

    /**
     * 查询用户购物车缓存
     * @return
     */
    List<ShoppingCart> listForCart(Long userId);

    /**
     * 查询用户购物车中选中的商品
     *
     * @param userId
     * @return
     */
    List<ShoppingCart> listForCartChecked(Long userId);

    /**
     * 查询用户购物车中选中的商品
     *
     * @param userId
     * @return
     */
    List<ListForCartCheckedVO> listForCartCheckedProduct(Long userId);

    /**
     * 删除用户购物车中选中的商品
     *
     * @param userId
     */
    void deleteCartChecked(Long userId);

    /**
     * 删除用户购物车中指定的商品
     * @param userId
     * @param productId
     */
    void deleteCartChecked(Long userId, Integer productId,String productValues);;

    void deleteAllUsersCart();
}
